book/imported/game-develop-study/toon-shader-links/아웃 라인 처리 방식 모음.md

아웃 라인 처리 방식 모음

아웃 라인 처리 방식 모음

자료 링크: https://teodutra.com/unity/shaders/outline/2018/03/26/Outline-shaders/

번역 본문

이미지 1: 웨이포인트

바로 본론으로 갑니다. 윤곽선을 만드는 3.5가지 방법은 다음과 같습니다.

  1. 거꾸로 선체

잘 알려진 거꾸로 선체. 2번의 패스. 첫 번째 단계에서는 다음을 수행합니다.

  • 앞면을 잘라냅니다.
  • 정점을 법선 방향으로 밀어냅니다.
  • 외곽선 색상을 이용하여 반전된 선체를 렌더링합니다.

두 번째 패스에서는 메쉬를 정상적으로 렌더링합니다.

내부 윤곽선 렌더링을 방지하기 위해 Z 쓰기를 비활성화할 수 있지만 메시의 그리기 순서에 유의하세요. 또한 ZWrite를 끄면 Unity의 스카이박스 앞에 윤곽선이 표시되지 않습니다. 나중에 그려지기 때문입니다.

그림 2: 웨이포인트

  1. 스텐실 버퍼 사용

2번의 패스. 첫 번째 단계에서는 다음을 수행합니다.

  • 스텐실 버퍼에 일부 값을 설정합니다.
  • 메쉬를 정상적으로 렌더링합니다.

두 번째 패스에서는:

  • 스텐실 값이 첫 번째 패스에서 설정한 값과 다른 경우:
    • 정점을 법선 방향으로 밀어냅니다.
    • 외곽선 색상을 이용하여 선체를 렌더링합니다.

그림 3: 웨이포인트

  1. 내부/외부 별도 제어가 가능한 스텐실 버퍼 사용

이 셰이더에서는 외부 윤곽선과 내부 윤곽선의 두께를 별도로 제어할 수 있습니다. 세 가지 패스가 있습니다. 첫 번째 패스:

  • 스텐실 버퍼에 일부 값을 씁니다.
  • 메쉬를 정상적으로 렌더링합니다.

두 번째 패스(내부 윤곽선):

  • 스텐실 값이 첫 번째 패스에서 설정한 값과 동일한 경우:
    • 내부 두께를 이용하여 외곽선(역선체)을 렌더링합니다.

세 번째 패스(외부 윤곽선):

  • 스텐실 값이 첫 번째 패스에서 설정한 값과 다른 경우:
    • 외부 두께를 이용하여 외곽선(역선체)을 렌더링합니다.

그림 4: 웨이포인트

3.25) “림 라이트” 사용하기

이는 개요는 아니지만 유용할 수 있으며 한 번만 통과하면 됩니다. 다음을 수행해야 합니다.

  • 보는 방향과 법선 방향 사이의 내적을 계산합니다.
  • Smoothstep을 사용하여 원하는 강도와 부드러움에 따라 도트 값을 조정합니다.
  • 최종 값을 사용하여 외곽선 색상과 메쉬 텍스처 사이를 이동합니다.

그림 5: 웨이포인트

3.5) MatCap 사용

또한 이것은 개요는 아니지만 꽤 좋아 보이고 한 번의 패스가 필요하며 게임에 원하는 아트 스타일에 따라 유용할 수 있습니다. MatCap 텍스처에는 일종의 조명 설정이 포함되어 있으며, "유사한" 조명을 얻기 위해 뷰 공간에서 표면의 법선을 사용하여 그러한 종류의 텍스처를 샘플링할 수 있습니다. 단계는 다음과 같습니다.* 노멀을 뷰 공간으로 변환합니다.

  • 법선을 [-1, 1]에서 [0, 1]로 다시 매핑합니다.
  • matcap 텍스처를 샘플링하려면 Normal.xy를 사용하세요.
  • matcap 값을 사용하여 윤곽선 색상과 메쉬 텍스처 사이를 이동합니다.

그림 6: 웨이포인트

대략적인 정보를 담은 포스팅이었습니다. 블로그 게시물 작업을 하고 싶은 만큼 시간이 많지 않기 때문에 게시물 작성보다 코드에 더 집중할 것 같습니다. 따라서 다음 게시물은 이 빠른 형식을 따를 수 있습니다.

모든 셰이더는 https://github.com/teofilobd/BlogProject/tree/master/Assets/05%20-%20Outline에서 사용할 수 있습니다.

로봇은 Unity의 에셋 스토어: https://assetstore.unity.com/packages/3d/characters/robots/space-robot-kyle-4696에서 다운로드되었습니다.